<?php

/**
 * Class Check
 * Desc:
 */
header("content-type:text/html;charset=utf-8");
class Check {

    /**
     * 检测请求参数(动态token使用)
     * @return null request arr
     */
    public static function checkParamsDynamic(){
        if(!IS_GET && !IS_POST){
            Response::show(10001,'request method not know参数有误',null);
        }
        $arr = null;
        if(IS_GET){
            $arr = $_GET;
            self::checkGet($arr);
        } else if(IS_POST){
            $arr = $_POST;
            self::checkPost($arr);
        }
        self::checkDynamicToken($arr);
        return $arr;
    }

    /**
     * 检测请求参数(普通token使用)
     * @return null request arr
     */
    public static function checkParamsNormal(){
        if(!IS_GET && !IS_POST){
            Response::show(10001,'get or post 参数有误 (request method not know)',null);
        }
        $arr = null;
        if(IS_GET){
            $arr = $_GET;
            self::checkGet($arr);
        } else if(IS_POST){
            $arr = $_POST;
            self::checkPost($arr);
        }
        self::checkNormalToken($arr);
        return $arr;
    }

    public static function checkPost($post){
        if(!isset($post) || empty($post)){
            Response::show(10001,'post参数有误',null);
        } /*else {
            foreach ($post as $key => $value){
                if($value == "" || $value == ''|| $value == 'null'||$value == null){
                    Response::show(10001,'post参数有误',null);

                }
            }
        }*/
    }

    public static function checkGet($get){
        if(!isset($get) || empty($get)){
            Response::show(10001,'get参数有误',null);
        } /*else{
            foreach ($get as $key => $value){
                if($value == "" || $value == ''|| $value == 'null'||$value == null){
                    Response::show(10001,'get参数有误',null);

                }
            }
        }*/
    }

    /**
     * 验证动态token是否有效
     * @param $arr
     */
    public static function checkDynamicToken($arr){
        if(C('ACCESS_TOKEN_APP_ID') != $arr['access_token_app_id']){
            \Response::show(10004,'access token app id 有误 dynamic token验证错误',null);
        }

        $Users = M('User');
        $userDatas = $Users->where(array('user_id'=>$arr['user_id']))->find();
        if($userDatas){
            if($arr['access_token'] != $userDatas['user_access_token']) {
                Response::show(10004,'dynamic token验证错误',null);
            }
        } else {
            Response::show(10004,'dynamic token验证错误 User id 有误 或者 服务器数据库异常',null);
        }

    }

    /**
     * 验证普通token是否有效
     * @param $arr
     */
    public static function checkNormalToken($arr){
        $token = md5(C('REQUEST_NORMAL_TOKEN'));
        if(C('ACCESS_TOKEN_APP_ID') != $arr['access_token_app_id']){
            \Response::show(10004,'access token app id 有误 normal token验证错误',null);
        }
        if($arr['access_token'] != $token){
            Response::show(10004,'normal token验证错误',null);
        }
    }

    /**
     * IsUsername函数:检测是否符合用户名格式
     * $Argv是要检测的用户名参数
     * $RegExp是要进行检测的正则语句
     * 返回值:符合用户名格式返回用户名,不是返回false
     */
    static function IsUsername($Argv){
//        $RegExp="/^[a-zA-Z][a-zA-Z0-9]{5,15}$/"; //由大小写字母跟数字组成并且长度在6-16字符直接
        $RegExp="/^[a-zA-Z][-_0-9a-zA-Z]{5,15}$/"; //由大小写字母跟数字组成并且长度在6-16字符直接
        return preg_match($RegExp,$Argv)?true:false;
    }

    static function IsNickname($Argv){
//        $RegExp="/^[a-zA-Z][a-zA-Z0-9]{5,15}$/"; //由大小写字母跟数字组成并且长度在6-16字符直接
        $RegExp="/^[\\x{4e00}-\\x{9fa5}a-zA-Z][\\x{4e00}-\\x{9fa5}0-9a-zA-Z-_]{5,29}$/u"; //由大小写字母跟数字组成并且长度在6-16字符直接
        return preg_match($RegExp,$Argv)?true:false;
    }

    /**
     * IsMail函数:检测是否为正确的邮件格式
     * 返回值:是正确的邮件格式返回邮件,不是返回false
     */
    static function IsMail($Argv){
        $RegExp='/^[a-z0-9][a-z\.0-9-_]+@[a-z0-9_-]+(?:\.[a-z]{0,3}\.[a-z]{0,2}|\.[a-z]{0,3}|\.[a-z]{0,2})$/i';
        return preg_match($RegExp,$Argv)?true:false;
    }

    /**
     * IsSmae函数:检测参数的值是否相同
     * 返回值:相同返回true,不相同返回false
     */
    Function IsSame($ArgvOne,$ArgvTwo,$Force=false){
        return $Force?$ArgvOne===$ArgvTwo:$ArgvOne==$ArgvTwo;
    }

    /**
     * IsQQ函数:检测参数的值是否符合QQ号码的格式
     * 返回值:是正确的QQ号码返回QQ号码,不是返回false
     */
    static function IsQQ($Argv){
        $RegExp='/^[1-9][0-9]{5,11}$/';
        return preg_match($RegExp,$Argv)?true:false;
    }

    /**
     * IsMobile函数:检测参数的值是否为正确的中国手机号码格式
     * 返回值:是正确的手机号码返回手机号码,不是返回false
     */
    static function IsMobile($Argv){
        $RegExp='/^1[34578]\d{9}$/';
        return preg_match($RegExp,$Argv)?true:false;
    }

    /**
     * IsTel函数:检测参数的值是否为正取的中国电话号码格式包括区号
     * 返回值:是正确的电话号码返回电话号码,不是返回false
     */
    Function IsTel($Argv){
        $RegExp='/[0-9]{3,4}-[0-9]{7,8}$/';
        return preg_match($RegExp,$Argv)?$Argv:false;
    }

    /**
     * IsNickname函数:检测参数的值是否为正确的昵称格式(Beta)
     * 返回值:是正确的昵称格式返回昵称格式,不是返回false
     */
    /*Function IsNickname($Argv){
        $RegExp='/^\s*$|^c:\\con\\con$|[%,\*\"\s\t\<\>\&\'\(\)]|\xA1\xA1|\xAC\xA3|^Guest|^\xD3\xCE\xBF\xCD|\xB9\x43\xAB\xC8/is'; //Copy From DZ
        return preg_match($RegExp,$Argv)?$Argv:false;
    }*/

    /**
     * IsChinese函数:检测参数是否为中文
     * 返回值:是返回参数,不是返回false
     */
    Function IsChinese($Argv,$Encoding='utf8'){
        $RegExp = $Encoding=='utf8'?'/^[\x{4e00}-\x{9fa5}]+$/u':'/^([\x80-\xFF][\x80-\xFF])+$/';
        Return preg_match($RegExp,$Argv)?$Argv:False;
    }

}